/*
 * rotaciones.fx
 *
 * Created on 23-dic-2009, 16:14:44
 */

package ProgramSamples.Graphics.Lineas;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.text.Text;
import javafx.scene.paint.Color;
import javafx.scene.paint.Stop;
import javafx.scene.paint.LinearGradient;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.shape.Path;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.ArcTo;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.transform.Transform;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Shear;


Stage {
    title: "Transformations"
    width: 250
    height: 300
    scene: Scene{
            fill: Color.WHITE
            content:[
                VBox{
                    spacing: 10
                    content: [
                        // Rotated graphics
                        HBox{
                            spacing: 10
                            content: [
                                for (angle in [2, 4]){
                                    Path{
                                        stroke: null
                                        transforms: Rotate {
                                            angle: bind angle * 60
                                            pivotX: 40
                                            pivotY: 40
                                        };
                                        fill: LinearGradient {
                                            startX:60,
                                            startY:10,
                                            endX:10
                                            endY:80 ,
                                            proportional: false
                                            stops: [
                                                Stop {offset: 0.0 color: Color.DODGERBLUE},
                                                Stop {offset: 0.5 color: Color.LIGHTSKYBLUE},
                                                Stop {offset: 1.0 color: Color.WHITE}
                                            ]
                                        }
                                        elements: [
                                            MoveTo {x: 40 y: 10 },
                                            LineTo {x: 60 y: 30},
                                            LineTo {x: 40 y: 50 },
                                            LineTo {x: 40 y: 40 },
                                            ArcTo {x: 40 y: 80 radiusX: 20 radiusY: 20},
                                            ArcTo {x: 40 y: 20 radiusX: 30 radiusY: 30
                                                   sweepFlag: true},
                                            LineTo {x: 40 y:10}
                                        ]
                                    } //Path

                                }//for
                            ]
                        },//HBox
                        //Translated text
                        HBox{
                            spacing: 10
                            content:[
                                for (delta in [10, 20, 30]){
                                    Text{
                                        content:"Translation"
                                        transforms: Transform.translate(delta / 2, delta);
                                    }//Text

                                }//for
                            ]
                        },//HBox
                        //Transformed image, shear transformation
                        HBox{
                            content:[
                                for (value in [1, 2]){

                                    ImageView{
                                        transforms: Shear {
                                            x: value / 2,
                                            y: value / 3
                                        };
                                        image: Image{
                                                url: "{__DIR__}strawberry.jpg"
                                            }
                                    }//ImageView

                                }//for
                            ]
                        },//HBox
                        //Scalable graphics
                        HBox{
                            spacing: 15
                            content:[
                                for (scale in [1, 1.5, 2]) {
                                    Group{
                                        content:[
                                            Circle{
                                                centerX: 20
                                                centerY:20
                                                radius:20
                                                fill: Color.RED},
                                            Line {
                                                startX: 10
                                                startY: 10
                                                endX: 30
                                                endY: 30
                                                stroke: Color.WHITE
                                                strokeWidth: 2},
                                            Line {
                                                startX: 10
                                                startY: 30
                                                endX: 30
                                                endY: 10
                                                stroke: Color.WHITE
                                                strokeWidth: 2}
                                        ]
                                        opacity: 0.8
                                        transforms: Transform.scale(scale, scale);
                                    }//Group

                                }//for
                            ]
                        },//HBox
                        //Transformed image, perspective transformation
                   ]//content
                } //VBox
            ]
        }//Scene
}//Stage